from django.shortcuts import render
from commodity.models import *


# 函数式视图：处理首页请求
def indexView(request):
    title = '首页'  # 页面标题
    classContent = ''  # 用于页面样式控制的变量

    # 获取销量最高的8个商品（按销量降序排列）
    commodityInfos = CommodityInfos.objects.order_by('-sold').all()[:8]

    # 获取所有商品分类
    types = Types.objects.all()

    # 筛选"儿童服饰"分类下的二级分类
    cl = [x.seconds for x in types if x.firsts == '儿童服饰']
    # 获取"儿童服饰"分类下销量最高的5个商品
    clothes = CommodityInfos.objects.filter(types__in=cl).order_by('-sold')[:5]

    # 筛选"奶粉辅食"分类下的二级分类
    fl = [x.seconds for x in types if x.firsts == '奶粉辅食']
    # 获取"奶粉辅食"分类下销量最高的5个商品
    food = CommodityInfos.objects.filter(types__in=fl).order_by('-sold')[:5]

    # 筛选"儿童用品"分类下的二级分类
    gl = [x.seconds for x in types if x.firsts == '儿童用品']
    # 获取"儿童用品"分类下销量最高的5个商品
    goods = CommodityInfos.objects.filter(types__in=gl).order_by('-sold')[:5]

    # 将所有变量传递给模板渲染
    return render(request, 'index.html', locals())


# 基于类的视图：处理首页请求（功能与indexView相同）
from django.views.generic.base import TemplateView
from commodity.models import *


class indexClassView(TemplateView):
    template_name = 'index.html'  # 指定要渲染的模板
    template_engine = None  # 可选：指定模板引擎
    content_type = None  # 可选：指定响应的Content-Type
    extra_context = {'title': '首页', 'classContent': ''}  # 额外的模板上下文变量

    # 重写获取上下文数据的方法
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)  # 获取父类的上下文

        # 获取销量最高的8个商品
        context['commodityInfos'] = CommodityInfos.objects.order_by('-sold').all()[:8]

        # 获取所有商品分类
        types = Types.objects.all()

        # 筛选"儿童服饰"分类下的商品
        cl = [x.seconds for x in types if x.firsts == '儿童服饰']
        context['clothes'] = CommodityInfos.objects.filter(types__in=cl).order_by('-sold')[:5]

        # 筛选"奶粉辅食"分类下的商品
        fl = [x.seconds for x in types if x.firsts == '奶粉辅食']
        context['food'] = CommodityInfos.objects.filter(types__in=fl).order_by('-sold')[:5]

        # 筛选"儿童用品"分类下的商品
        gl = [x.seconds for x in types if x.firsts == '儿童用品']
        context['goods'] = CommodityInfos.objects.filter(types__in=gl).order_by('-sold')[:5]

        return context

    # 处理HTTP GET请求
    def get(self, request, *args, **kwargs):
        # 获取上下文数据
        context = self.get_context_data(**kwargs)
        # 渲染模板并返回响应
        return self.render_to_response(context)

    # 处理HTTP POST请求（当前为空实现）
    def post(self, request, *args, **kwargs):
        # 获取上下文数据
        context = self.get_context_data(**kwargs)
        # 渲染模板并返回响应
        return self.render_to_response(context)


# 404错误处理视图
def page_not_found(request, exception):
    # 渲染404错误页面，返回状态码404
    return render(request, '404.html', status=404)


# 500错误处理视图
def page_error(request):
    # 渲染500错误页面，返回状态码500
    return render(request, '404.html', status=500)